import express from 'express';
import bodyParser from 'body-parser';
import Stripe from 'stripe';
import orderModel from '../models/orderModel.js'; // Adjust the import path according to your project structure

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
const router = express.Router();

// 定义一个处理Webhook的路由，使用bodyParser.raw来解析原始的JSON请求体
router.post(
  '/webhook',
  bodyParser.raw({ type: 'application/json' }),
  async (req, res) => {
    // 获取Stripe签名头，用于验证Webhook事件的来源
    const sig = req.headers['stripe-signature'];
    let event;

    // 尝试构造Stripe事件对象，以验证Webhook的合法性和完整性
    try {
      event = stripe.webhooks.constructEvent(
        req.body,
        sig,
        process.env.STRIPE_WEBHOOK_SECRET
      );
    } catch (err) {
      // 如果构造事件失败，返回错误信息
      return res.status(400).send(`Webhook error: ${err.message}`);
    }

    // 处理特定类型的事件：checkout.session.completed，表示支付完成
    if (event.type === 'checkout.session.completed') {
      // 获取会话对象和订单ID
      const session = event.data.object;
      const orderId = session.client_reference_id;

      // 根据订单ID查询数据库中的订单
      const order = await orderModel.findById(orderId);
      // 如果找到对应的订单，将其标记为已支付并保存
      if (order) {
        order.isPaid = true;
        await order.save();
      }
    }

    // 响应Webhook请求，表示事件已接收
    res.status(200).send('Received');
  }
);

export default router;
